1 /*
2   D bindings for CUDA.
3   Authors:    Prasun Anand
4   Copyright:  Copyright (c) 2017, Prasun Anand. All rights reserved.
5   License:    BSD 3-Clause License
6 */
7 
8 module cuda_d.cuda_runtime_api;
9 
10 import cuda_d.cuda;
11 import cuda_d.cublas_api;
12 import cuda_d.vector_types;
13 
14 extern (C):
15 
16 enum CUDART_VERSION = 7050;
17 
18 extern (D) auto __CUDART_API_PTDS(T)(auto ref T api)
19 {
20     return api;
21 }
22 
23 extern (D) auto __CUDART_API_PTSZ(T)(auto ref T api)
24 {
25     return api;
26 }
27 
28 cudaError_t cudaDeviceReset ();
29 
30 cudaError_t cudaDeviceSynchronize ();
31 
32 cudaError_t cudaDeviceSetLimit (cudaLimit limit, size_t value);
33 
34 cudaError_t cudaDeviceGetLimit (size_t* pValue, cudaLimit limit);
35 
36 cudaError_t cudaDeviceGetCacheConfig (cudaFuncCache* pCacheConfig);
37 
38 cudaError_t cudaDeviceGetStreamPriorityRange (int* leastPriority, int* greatestPriority);
39 
40 cudaError_t cudaDeviceSetCacheConfig (cudaFuncCache cacheConfig);
41 
42 cudaError_t cudaDeviceGetSharedMemConfig (cudaSharedMemConfig* pConfig);
43 
44 cudaError_t cudaDeviceSetSharedMemConfig (cudaSharedMemConfig config);
45 
46 cudaError_t cudaDeviceGetByPCIBusId (int* device, const(char)* pciBusId);
47 
48 cudaError_t cudaDeviceGetPCIBusId (char* pciBusId, int len, int device);
49 
50 cudaError_t cudaIpcGetEventHandle (cudaIpcEventHandle_t* handle, cudaEvent_t event);
51 
52 cudaError_t cudaIpcOpenEventHandle (cudaEvent_t* event, cudaIpcEventHandle_t handle);
53 
54 cudaError_t cudaIpcGetMemHandle (cudaIpcMemHandle_t* handle, void* devPtr);
55 
56 cudaError_t cudaIpcOpenMemHandle (void** devPtr, cudaIpcMemHandle_t handle, uint flags);
57 
58 cudaError_t cudaIpcCloseMemHandle (void* devPtr);
59 
60 cudaError_t cudaThreadExit ();
61 
62 cudaError_t cudaThreadSynchronize ();
63 
64 cudaError_t cudaThreadSetLimit (cudaLimit limit, size_t value);
65 
66 cudaError_t cudaThreadGetLimit (size_t* pValue, cudaLimit limit);
67 
68 cudaError_t cudaThreadGetCacheConfig (cudaFuncCache* pCacheConfig);
69 
70 cudaError_t cudaThreadSetCacheConfig (cudaFuncCache cacheConfig);
71 
72 cudaError_t cudaGetLastError ();
73 
74 cudaError_t cudaPeekAtLastError ();
75 
76 const(char)* cudaGetErrorName (cudaError_t error);
77 
78 
79 const(char)* cudaGetErrorString (cudaError_t error);
80 
81 cudaError_t cudaGetDeviceCount (int* count);
82 
83 cudaError_t cudaGetDeviceProperties (cudaDeviceProp* prop, int device);
84 
85 //cudaError_t cudaDeviceGetAttribute (int* value, cudaDeviceAttr attr, int device);
86 
87 cudaError_t cudaChooseDevice (int* device, const(cudaDeviceProp)* prop);
88 
89 cudaError_t cudaSetDevice (int device);
90 
91 cudaError_t cudaGetDevice (int* device);
92 
93 cudaError_t cudaSetValidDevices (int* device_arr, int len);
94 
95 cudaError_t cudaSetDeviceFlags (uint flags);
96 
97 cudaError_t cudaGetDeviceFlags (uint* flags);
98 
99 cudaError_t cudaStreamCreate (cudaStream_t* pStream);
100 
101 cudaError_t cudaStreamCreateWithFlags (cudaStream_t* pStream, uint flags);
102 
103 cudaError_t cudaStreamCreateWithPriority (cudaStream_t* pStream, uint flags, int priority);
104 
105 cudaError_t cudaStreamGetPriority (cudaStream_t hStream, int* priority);
106 
107 cudaError_t cudaStreamGetFlags (cudaStream_t hStream, uint* flags);
108 
109 cudaError_t cudaStreamDestroy (cudaStream_t stream);
110 
111 cudaError_t cudaStreamWaitEvent (cudaStream_t stream, cudaEvent_t event, uint flags);
112 
113 alias cudaStreamCallback_t = void function (cudaStream_t stream, cudaError_t status, void* userData);
114 
115 
116 cudaError_t cudaStreamAddCallback (
117     cudaStream_t stream,
118     cudaStreamCallback_t callback,
119     void* userData,
120     uint flags);
121 
122 
123 cudaError_t cudaStreamSynchronize (cudaStream_t stream);
124 
125 cudaError_t cudaStreamQuery (cudaStream_t stream);
126 
127 cudaError_t cudaStreamAttachMemAsync (cudaStream_t stream, void* devPtr, size_t length, uint flags);
128 
129 cudaError_t cudaEventCreate (cudaEvent_t* event);
130 
131 cudaError_t cudaEventCreateWithFlags (cudaEvent_t* event, uint flags);
132 
133 cudaError_t cudaEventRecord (cudaEvent_t event, cudaStream_t stream);
134 
135 
136 cudaError_t cudaEventQuery (cudaEvent_t event);
137 
138 cudaError_t cudaEventSynchronize (cudaEvent_t event);
139 
140 cudaError_t cudaEventDestroy (cudaEvent_t event);
141 
142 cudaError_t cudaEventElapsedTime (float* ms, cudaEvent_t start, cudaEvent_t end);
143 
144 cudaError_t cudaLaunchKernel (const(void)* func, dim3 gridDim, dim3 blockDim, void** args, size_t sharedMem, cudaStream_t stream);
145 
146 cudaError_t cudaFuncSetCacheConfig (const(void)* func, cudaFuncCache cacheConfig);
147 
148 cudaError_t cudaFuncSetSharedMemConfig (const(void)* func, cudaSharedMemConfig config);
149 
150 //cudaError_t cudaFuncGetAttributes (cudaFuncAttributes* attr, const(void)* func);
151 
152 cudaError_t cudaSetDoubleForDevice (double* d);
153 
154 cudaError_t cudaSetDoubleForHost (double* d);
155 
156 cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessor (int* numBlocks, const(void)* func, int blockSize, size_t dynamicSMemSize);
157 
158 cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags (int* numBlocks, const(void)* func, int blockSize, size_t dynamicSMemSize, uint flags);
159 
160 cudaError_t cudaConfigureCall (dim3 gridDim, dim3 blockDim, size_t sharedMem, cudaStream_t stream);
161 
162 cudaError_t cudaSetupArgument (const(void)* arg, size_t size, size_t offset);
163 
164 cudaError_t cudaLaunch (const(void)* func);
165 
166 cudaError_t cudaMallocManaged (void** devPtr, size_t size, uint flags);
167 
168 cudaError_t cudaMalloc (void** devPtr, size_t size);
169 
170 cudaError_t cudaMallocHost (void** ptr, size_t size);
171 
172 cudaError_t cudaMallocPitch (void** devPtr, size_t* pitch, size_t width, size_t height);
173 
174 //cudaError_t cudaMallocArray (cudaArray_t* array, const(cudaChannelFormatDesc)* desc, size_t width, size_t height, uint flags);
175 
176 cudaError_t cudaFree (void* devPtr);
177 
178 cudaError_t cudaFreeHost (void* ptr);
179 
180 cudaError_t cudaFreeArray (cudaArray_t array);
181 
182 //cudaError_t cudaFreeMipmappedArray (cudaMipmappedArray_t mipmappedArray);
183 
184 cudaError_t cudaHostAlloc (void** pHost, size_t size, uint flags);
185 
186 cudaError_t cudaHostRegister (void* ptr, size_t size, uint flags);
187 
188 cudaError_t cudaHostUnregister (void* ptr);
189 
190 cudaError_t cudaHostGetDevicePointer (void** pDevice, void* pHost, uint flags);
191 
192 cudaError_t cudaHostGetFlags (uint* pFlags, void* pHost);
193 
194 //cudaError_t cudaMalloc3D (cudaPitchedPtr* pitchedDevPtr, cudaExtent extent);
195 
196 //cudaError_t cudaMalloc3DArray (cudaArray_t* array, const(cudaChannelFormatDesc)* desc, cudaExtent extent, uint flags);
197 
198 //cudaError_t cudaMallocMipmappedArray (cudaMipmappedArray_t* mipmappedArray, const(cudaChannelFormatDesc)* desc, cudaExtent extent, uint numLevels, uint flags);
199 
200 //cudaError_t cudaGetMipmappedArrayLevel (cudaArray_t* levelArray, cudaMipmappedArray_const_t mipmappedArray, uint level);
201 
202 //http://horacio9573.no-ip.org/cuda/structcudaMemcpy3DParms.html
203 //cudaError_t cudaMemcpy3D (const(cudaMemcpy3DParms)* p);
204 
205 //cudaError_t cudaMemcpy3DPeer (const(cudaMemcpy3DPeerParms)* p);
206 
207 //cudaError_t cudaMemcpy3DAsync (const(cudaMemcpy3DParms)* p, cudaStream_t stream);
208 
209 //cudaError_t cudaMemcpy3DPeerAsync (const(cudaMemcpy3DPeerParms)* p, cudaStream_t stream);
210 
211 cudaError_t cudaMemGetInfo (size_t* free, size_t* total);
212 
213 //cudaError_t cudaArrayGetInfo (cudaChannelFormatDesc* desc, cudaExtent* extent, uint* flags, cudaArray_t array);
214 
215 cudaError_t cudaMemcpy (void* dst, const(void)* src, size_t count, cudaMemcpyKind kind);
216 
217 cudaError_t cudaMemcpyPeer (void* dst, int dstDevice, const(void)* src, int srcDevice, size_t count);
218 
219 cudaError_t cudaMemcpyToArray (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t count, cudaMemcpyKind kind);
220 
221 cudaError_t cudaMemcpyFromArray (void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind);
222 
223 cudaError_t cudaMemcpyArrayToArray (cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, cudaMemcpyKind kind);
224 
225 cudaError_t cudaMemcpy2D (void* dst, size_t dpitch, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind);
226 
227 cudaError_t cudaMemcpy2DToArray (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind);
228 
229 cudaError_t cudaMemcpy2DFromArray (void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind);
230 
231 cudaError_t cudaMemcpy2DArrayToArray (cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, cudaMemcpyKind kind);
232 
233 cudaError_t cudaMemcpyToSymbol (const(void)* symbol, const(void)* src, size_t count, size_t offset, cudaMemcpyKind kind);
234 
235 cudaError_t cudaMemcpyFromSymbol (void* dst, const(void)* symbol, size_t count, size_t offset, cudaMemcpyKind kind);
236 
237 cudaError_t cudaMemcpyAsync (void* dst, const(void)* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream);
238 
239 cudaError_t cudaMemcpyPeerAsync (void* dst, int dstDevice, const(void)* src, int srcDevice, size_t count, cudaStream_t stream);
240 
241 cudaError_t cudaMemcpyToArrayAsync (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream);
242 
243 cudaError_t cudaMemcpyFromArrayAsync (void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind, cudaStream_t stream);
244 
245 cudaError_t cudaMemcpy2DAsync (void* dst, size_t dpitch, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream);
246 
247 cudaError_t cudaMemcpy2DToArrayAsync (cudaArray_t dst, size_t wOffset, size_t hOffset, const(void)* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream);
248 
249 cudaError_t cudaMemcpy2DFromArrayAsync (void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream);
250 
251 cudaError_t cudaMemcpyToSymbolAsync (const(void)* symbol, const(void)* src, size_t count, size_t offset, cudaMemcpyKind kind, cudaStream_t stream);
252 
253 cudaError_t cudaMemcpyFromSymbolAsync (void* dst, const(void)* symbol, size_t count, size_t offset, cudaMemcpyKind kind, cudaStream_t stream);
254 
255 cudaError_t cudaMemset (void* devPtr, int value, size_t count);
256 
257 cudaError_t cudaMemset2D (void* devPtr, size_t pitch, int value, size_t width, size_t height);
258 
259 //cudaError_t cudaMemset3D (cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent);
260 
261 //cudaError_t cudaMemsetAsync (void* devPtr, int value, size_t count, cudaStream_t stream);
262 
263 //cudaError_t cudaMemset2DAsync (void* devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream);
264 
265 //cudaError_t cudaMemset3DAsync (cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent, cudaStream_t stream);
266 
267 //cudaError_t cudaGetSymbolAddress (void** devPtr, const(void)* symbol);
268 
269 //cudaError_t cudaGetSymbolSize (size_t* size, const(void)* symbol);
270 
271 //cudaError_t cudaPointerGetAttributes (cudaPointerAttributes* attributes, const(void)* ptr);
272 
273 //cudaError_t cudaDeviceCanAccessPeer (int* canAccessPeer, int device, int peerDevice);
274 
275 //cudaError_t cudaDeviceEnablePeerAccess (int peerDevice, uint flags);
276 
277 //cudaError_t cudaDeviceDisablePeerAccess (int peerDevice);
278 
279 //cudaChannelFormatDesc cudaCreateChannelDesc (int x, int y, int z, int w, cudaChannelFormatKind f);
280 
281 //cudaError_t cudaGraphicsUnregisterResource (cudaGraphicsResource_t resource);
282 
283 //cudaError_t cudaGraphicsResourceSetMapFlags (cudaGraphicsResource_t resource, uint flags);
284 
285 //cudaError_t cudaGraphicsMapResources (int count, cudaGraphicsResource_t* resources, cudaStream_t stream);
286 
287 //cudaError_t cudaGraphicsUnmapResources (int count, cudaGraphicsResource_t* resources, cudaStream_t stream);
288 
289 //cudaError_t cudaGraphicsResourceGetMappedPointer (void** devPtr, size_t* size, cudaGraphicsResource_t resource);
290 
291 //cudaError_t cudaGraphicsSubResourceGetMappedArray (cudaArray_t* array, cudaGraphicsResource_t resource, uint arrayIndex, uint mipLevel);
292 
293 //cudaError_t cudaGraphicsResourceGetMappedMipmappedArray (cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource);
294 
295 //cudaError_t cudaGetChannelDesc (cudaChannelFormatDesc* desc, cudaArray_const_t array);
296 
297 //cudaError_t cudaBindTexture (size_t* offset, const(textureReference)* texref, const(void)* devPtr, const(cudaChannelFormatDesc)* desc, size_t size);
298 
299 //cudaError_t cudaBindTexture2D (size_t* offset, const(textureReference)* texref, const(void)* devPtr, const(cudaChannelFormatDesc)* desc, size_t width, size_t height, size_t pitch);
300 
301 //cudaError_t cudaBindTextureToArray (const(textureReference)* texref, cudaArray_const_t array, const(cudaChannelFormatDesc)* desc);
302 
303 //cudaError_t cudaBindTextureToMipmappedArray (const(textureReference)* texref, cudaMipmappedArray_const_t mipmappedArray, const(cudaChannelFormatDesc)* desc);
304 
305 //cudaError_t cudaUnbindTexture (const(textureReference)* texref);
306 
307 //cudaError_t cudaGetTextureAlignmentOffset (size_t* offset, const(textureReference)* texref);
308 
309 //cudaError_t cudaGetTextureReference (const(textureReference*)* texref, const(void)* symbol);
310 
311 //cudaError_t cudaBindSurfaceToArray (const(surfaceReference)* surfref, cudaArray_const_t array, const(cudaChannelFormatDesc)* desc);
312 
313 //cudaError_t cudaGetSurfaceReference (const(surfaceReference*)* surfref, const(void)* symbol);
314 
315 //cudaError_t cudaCreateTextureObject (cudaTextureObject_t* pTexObject, const(cudaResourceDesc)* pResDesc, const(cudaTextureDesc)* pTexDesc, const(cudaResourceViewDesc)* pResViewDesc);
316 
317 //cudaError_t cudaDestroyTextureObject (cudaTextureObject_t texObject);
318 
319 //cudaError_t cudaGetTextureObjectResourceDesc (cudaResourceDesc* pResDesc, cudaTextureObject_t texObject);
320 
321 //cudaError_t cudaGetTextureObjectTextureDesc (cudaTextureDesc* pTexDesc, cudaTextureObject_t texObject);
322 
323 //cudaError_t cudaGetTextureObjectResourceViewDesc (cudaResourceViewDesc* pResViewDesc, cudaTextureObject_t texObject);
324 
325 //cudaError_t cudaCreateSurfaceObject (cudaSurfaceObject_t* pSurfObject, const(cudaResourceDesc)* pResDesc);
326 
327 //cudaError_t cudaDestroySurfaceObject (cudaSurfaceObject_t surfObject);
328 
329 //cudaError_t cudaGetSurfaceObjectResourceDesc (cudaResourceDesc* pResDesc, cudaSurfaceObject_t surfObject);
330 
331 //cudaError_t cudaDriverGetVersion (int* driverVersion);
332 
333 //cudaError_t cudaRuntimeGetVersion (int* runtimeVersion);
334 
335 //cudaError_t cudaGetExportTable (const(void*)* ppExportTable, const(cudaUUID_t)* pExportTableId);